home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / music / 7 / ramdisk / copy.s < prev    next >
Text File  |  1986-03-19  |  5KB  |  208 lines

  1. *
  2. * copy.s
  3. *
  4. * written nov 85 by Jens-Uwe Mager
  5. *
  6.  
  7. * offsets into base-page
  8.  
  9. prglen    =         $c
  10. datalen   =         $14
  11. bsslen    =         $1c
  12. cmdlin    =         $80
  13.  
  14. * traps
  15.  
  16. bios      =         13
  17. xbios     =         14
  18. tos       =         1
  19.  
  20. * functions
  21.  
  22. prstrf    =         9
  23. creatf    =         $3c
  24. openf     =         $3d
  25. closef    =         $3e
  26. readf     =         $3f
  27. writef    =         $40
  28. lseekf    =         $42
  29. termf     =         $4c
  30.  
  31.           .text
  32. main:
  33.           lea       inits,a0
  34.           bsr       prstr
  35.           lea       fname,a0
  36.           bsr       open
  37.           bmi       errxit
  38.           move.w    d0,d7               ;file handle
  39.           bsr       filelen
  40.           bmi       errxit
  41.           lea       buffer,a0
  42.           move.l    a0,-(sp)            ;buffer ad
  43.           add.l     d0,a0
  44.           move.b    #0,(a0)+
  45.           move.l    a0,listend
  46.           lea       -256(sp),a1
  47.           sub.l     a0,a1
  48.           move.l    a1,max
  49.           move.l    d0,-(sp)            ;length
  50.           move.w    d7,-(sp)            ;handle
  51.           move.w    #readf,-(sp)
  52.           trap      #tos
  53.           add.l     #12,sp
  54.           tst.l     d0
  55.           bmi       errxit
  56.           move.w    d7,d0
  57.           bsr       close
  58.           bmi       errxit
  59.           lea       buffer,a6
  60.           move.w    (a6),d7             ; contains C:
  61.           bsr       skip
  62.           bcs       exit
  63.           move.l    a5,a6
  64. mainlp:   bsr       skip
  65.           bcs       exit
  66.           bsr       progress
  67.           lea       destname,a0
  68.           bsr       creat
  69.           bmi       errxit
  70.           move.w    d0,d6               ;handle for new file
  71.           move.l    a6,a0
  72.           bsr       open
  73.           bmi       errxit
  74.           move.w    d0,d5               ;handle for old file
  75. copylp:   move.l    listend,-(sp)
  76.           move.l    max,-(sp)
  77.           move.w    d5,-(sp)
  78.           move.w    #readf,-(sp)
  79.           trap      #tos
  80.           add.l     #12,sp
  81.           tst.l     d0
  82.           bmi       errxit
  83.           beq       iseof
  84.           move.l    listend,-(sp)
  85.           move.l    d0,-(sp)
  86.           move.w    d6,-(sp)
  87.           move.w    #writef,-(sp)
  88.           trap      #tos
  89.           add.l     #12,sp
  90.           tst.l     d0
  91.           bmi       errxit
  92.           bra       copylp
  93. iseof:    move.w    d6,d0
  94.           bsr       close
  95.           bmi       errxit
  96.           move.w    d5,d0
  97.           bsr       close
  98.           bmi       errxit
  99.           move.l    a5,a6
  100.           bra       mainlp
  101.  
  102. exit:
  103.           move.w    #0,-(sp)
  104.           bra.s     xit
  105. errxit:
  106.           move.w    #1,-(sp)
  107. xit:
  108.           move.w    #termf,-(sp)
  109.           trap      #tos
  110.  
  111. progress:
  112.           lea       mess1,a0
  113.           bsr       prstr
  114.           move.l    a6,a0
  115.           bsr       prstr
  116.           lea       mess2,a0
  117.           bsr       prstr
  118.           lea       destname,a0
  119.           bsr       prstr
  120.           lea       mess3,a0
  121.  
  122. prstr:
  123.           move.l    a0,-(sp)
  124.           move.w    #prstrf,-(sp)
  125.           trap      #tos
  126.           addq.l    #6,sp
  127.           rts
  128.  
  129. open:
  130.           clr.w     -(sp)               ;readonly
  131.           move.l    a0,-(sp)
  132.           move.w    #openf,-(sp)
  133.           trap      #tos
  134.           addq.l    #8,sp
  135.           tst.w     d0
  136.           rts
  137.  
  138. creat:
  139.           clr.w     -(sp)               ;std file r/w
  140.           move.l    a0,-(sp)
  141.           move.w    #creatf,-(sp)
  142.           trap      #tos
  143.           addq.l    #8,sp
  144.           tst.w     d0
  145.           rts
  146.  
  147. close:
  148.           move.w    d0,-(sp)
  149.           move.w    #closef,-(sp)
  150.           trap      #tos
  151.           addq.l    #4,sp
  152.           tst.w     d0
  153.           rts
  154.  
  155. filelen:
  156.           move.w    d0,-(sp)
  157.           move.w    #2,-(sp)
  158.           move.w    d0,-(sp)
  159.           clr.l     -(sp)
  160.           move.w    #lseekf,-(sp)
  161.           trap      #tos
  162.           add.l     #10,sp
  163.           move.w    (sp)+,d1
  164.           move.l    d0,-(sp)
  165.           move.w    #0,-(sp)
  166.           move.w    d1,-(sp)
  167.           clr.l     -(sp)
  168.           move.w    #lseekf,-(sp)
  169.           trap      #tos
  170.           add.l     #10,sp
  171.           move.l    (sp)+,d0
  172.           rts
  173. skip0:
  174.           move.l    a5,a6
  175. skip:
  176.           move.l    a6,a5
  177.           lea       destname,a0
  178.           move.w    d7,(a0)+            ;drive
  179. skiplp:   move.b    (a5)+,d0
  180.           beq.s     skipeof
  181.           cmp.b     #13,d0
  182.           beq.s     cr
  183.           move.b    d0,(a0)+
  184.           bra.s     skiplp
  185. cr:       move.b    #0,(a0)+
  186.           move.b    #0,-(a5)
  187.           addq.l    #2,a5
  188.           move.b    destname,d0
  189.           beq       skip0
  190.           rts
  191. skipeof:  or        #1,ccr
  192.           rts
  193.  
  194.           .data
  195. listend:  dc.l      0
  196. max:      dc.l      0
  197. fname:    dc.b      'file.lst',0
  198. mess1:    dc.b      'Copying ',0
  199. mess2:    dc.b      ' -> ',0
  200. mess3:    dc.b      13,10,0
  201. inits:    dc.b      $1b,'E',0
  202.  
  203.           .bss
  204. destname: ds.b      128
  205. buffer:   ds        1
  206.  
  207.           .end
  208. əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə